【PL/SQL】EXISTS 函数 比 IN 更优 您所在的位置:网站首页 there exist用法 【PL/SQL】EXISTS 函数 比 IN 更优

【PL/SQL】EXISTS 函数 比 IN 更优

#【PL/SQL】EXISTS 函数 比 IN 更优| 来源: 网络整理| 查看: 265

看完这章你会学习到以下内容:1. Exist函数的用法2. 比IN函数返回数据更优吗?使用范围?

经典案例:查询员工表里所属部门和部门名称

方法一套用子查询,员工表的部门编号在部门表里也出现,而且只返回部门表。当然,可以用连接的,一般也可以用子查询套用。

SELECT D.* FROM DEPT D WHERE DEPTNO IN (SELECT DEPTNO FROM EMP);

方法二:使用EXISTS函数一般而言,跟在Where筛选语句后面,然后在子查询里写两张表或者多张表的匹配条件。就像Join后面的On语句。

EXISTS(查询结果集):查询结果集有记录则成立,否则不成立NOT EXISTS(查询结果集):与EXISTS相反

语句解释:如果在子查询里面有返回值,则为真,则在原筛选语句里返回对应的值。如果在子查询里没有返回值,则为假,则在原筛选语句里返回表的字段名。

SELECT D.* FROM DEPT D WHERE EXISTS (SELECT 1 FROM EMP E WHERE E.DEPTNO = D.DEPTNO);

为什么说,Exists函数比IN查询效率更好?这是真的吗?

A: IN 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。一直以来认为exists比in效率高的说法是不准确的。 如果查询的两个表大小相当,那么用in和exists差别不大。EXISTS与IN的使用效率的问题,通常情况下采用exists要比in效率高,因为IN不走索引,但要看实际情况具体使用:

当B表数据较大时不适合使用in(),因为它会B表数据全部遍历一次.A表有10000条记录,B表有1000000条记录,最多有可能遍历10000*1000000次,效率很差.再如:A表有10000条记录,B表有100条记录,最多有可能遍历10000*100次,遍历次数大大减少,效率大大提升.

结论:in()适合B表比A表数据小的情况

当B表比A表数据大时适合使用exists(),因为它没有那么遍历操作,只需要再执行一次查询就行.如:A表有10000条记录,B表有1000000条记录,那么exists()会执行10000次去判断A表中的id是否与B表中的id相等.如:A表有10000条记录,B表有100000000条记录,那么exists()还是执行10000次,因为它只执行A.length次,可见B表数据越多,越适合exists()发挥效果.再如:A表有10000条记录,B表有100条记录,那么exists()还是执行10000次,还不如使用in()遍历10000*100次,因为in()是在内存里遍历比较,而exists()需要查询数据库,我们都知道查询数据库所消耗的性能更高,而内存比较很快.

结论:exists()适合B表比A表数据大的情况

补充资料:https://blog.csdn.net/msynl311833/article/details/100019323 NOT EXIST用法SQL中IN和EXISTS用法的区别 - 测试人生- - 博客园



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有